package RRHH_Modelo;

import Conexion.Conexion;
import java.sql.SQLException;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

public class RHH_CARGO {

    private int ID;
    private int ID_DEPENDENCIA;
    private int ID_TIPO_DE_CARGO;
    private int NIVEL;
    private int ESTADO;
    private String DESCRIPCION;
    private String PERFIL;
    private int STAFF=1;
    private Conexion con = null;

    public RHH_CARGO(Conexion con) {
        this.con=con;
    }

    public RHH_CARGO(int ID_DEPENDENCIA, int ID_TIPO_DE_CARGO, int NIVEL, String DESCRIPCION, String PERFIL) {
        this.ID_DEPENDENCIA = ID_DEPENDENCIA;
        this.ID_TIPO_DE_CARGO = ID_TIPO_DE_CARGO;
        this.NIVEL = NIVEL;
        this.DESCRIPCION = DESCRIPCION;
        this.PERFIL = PERFIL;
    }   
    
    public int Insertar() throws SQLException 
    {        
        String consulta = "insert into BROKER.RHH_CARGO(ID, ID_DEPENDENCIA, ID_TIPO_DE_CARGO, NIVEL, DESCRIPCION, PERFIL,STAFF) VALUES (0," + ID_DEPENDENCIA + ", " + ID_TIPO_DE_CARGO + ", " + NIVEL + ",'" + DESCRIPCION + "','"+PERFIL+"',"+STAFF+")";
        con.EjecutarSentencia(consulta);
        consulta = "select BROKER.RHH_CARGO2_SEQ.currval as ID from dual";
        ResultSet rs = con.EjecutarConsulta(consulta);
        rs.next();
        return rs.getInt("ID");
    }
    public void update() throws SQLException 
    {        
        String consulta = "update BROKER.RHH_CARGO set ID_TIPO_DE_CARGO="+ID_TIPO_DE_CARGO+", DESCRIPCION='"+DESCRIPCION+"', PERFIL='"+PERFIL+"',STAFF="+STAFF+" where ID="+ID;
        con.EjecutarSentencia(consulta);
    }
    public void actualizarReferencia(double cargo,double referencia) throws SQLException 
    {        
        String consulta = "update BROKER.RHH_CARGO set ID_DEPENDENCIA="+referencia+" where ID="+cargo;
        con.EjecutarSentencia(consulta);
    }        
    
    public boolean EliminarXid() throws SQLException 
    {             
        String consulta = "update BROKER.RHH_CARGO set ESTADO=1 where ID = " + getID();
        con.EjecutarSentencia(consulta);            
        return true;        
    }

    public RHH_CARGO BuscarXid(int id) throws SQLException {
        String consulta = "select * from BROKER.RHH_CARGO where ID = " + id+" AND ESTADO=0";
        ResultSet rs = con.EjecutarConsulta(consulta);
        List<RHH_CARGO> lista = Cargar(rs);
        if(lista!=null && lista.size()>0) 
            return lista.get(0);
        else
            return null;
    }
    public RHH_CARGO UltimoCargoInsertado() throws SQLException {
            String consulta = "SELECT RHH_CARGO.* FROM broker.RHH_CARGO where RHH_CARGO.ID = (SELECT MAX(RHH_CARGO.ID)  FROM broker.RHH_CARGO where ESTADO=0)";
            ResultSet rs = con.EjecutarConsulta(consulta);
            return Cargar(rs).get(0);
    }
    
    public List<RHH_CARGO> CargoNoAsignado() throws SQLException{
            String consulta = "select c.* from BROKER.RHH_CARGO c where c.ID not in(select s.ID_CARGO from BROKER.RHH_CARGO_DEP_REG_SUC s where ESTADO=0)";
            ResultSet rs = con.EjecutarConsulta(consulta);
            return Cargar(rs);
        
    }
    
    public List<RHH_CARGO> CargosAcefalos() throws SQLException{
        String consulta = "SELECT c1.* FROM BROKER.RHH_CARGO c1 WHERE c1.ID NOT IN (SELECT c2.ID FROM BROKER.RHH_USUARIO ru, BROKER.RHH_CARGO c2 WHERE (ru.ID_CARGO = c2.ID) AND c2.ESTADO=0) ";
        ResultSet rs = con.EjecutarConsulta(consulta);
        return Cargar(rs);
    }
 
    public List<RHH_CARGO> Acefalos() throws SQLException 
    {        
        String consulta = "SELECT RHH_CARGO.* FROM BROKER.RHH_CARGO WHERE RHH_CARGO.ID NOT IN (SELECT RHH_USUARIO.ID_CARGO FROM BROKER.RHH_USUARIO where RHH_CARGO.ESTADO=0)";
        ResultSet rs = con.EjecutarConsulta(consulta);
        return Cargar(rs);
    }
    
    public List<RHH_CARGO> AcefalosSinConvocatoria() throws SQLException 
    {        
        String consulta = "SELECT RHH_CARGO.* FROM BROKER.RHH_CARGO WHERE RHH_CARGO.ID NOT IN (SELECT RHH_USUARIO.ID_CARGO FROM BROKER.RHH_USUARIO) AND RHH_CARGO.ID NOT IN (SELECT RHH_CONVOCATORIA.ID_CARGO FROM BROKER.RHH_CONVOCATORIA) AND RHH_CARGO.ESTADO=0";
        ResultSet rs = con.EjecutarConsulta(consulta);
        return Cargar(rs);
    }
 
    public List<RHH_CARGO> Todos() throws SQLException {
        String consulta = "select * from BROKER.RHH_CARGO where ESTADO=0";
        ResultSet rs = con.EjecutarConsulta(consulta);
        return Cargar(rs);
    }
    public List<RHH_CARGO> buscarxDescripcion(String text) throws SQLException {
        String consulta = "select * from BROKER.RHH_CARGO where ESTADO=0 and upper(DESCRIPCION) like upper('%"+text+"%')";
        ResultSet rs = con.EjecutarConsulta(consulta);
        return Cargar(rs);
    }
    public List<RHH_CARGO> buscarxDepRegSuc(String text) throws SQLException {
        String consulta = "SELECT DISTINCT RHH_CARGO.* \n" +
                        "  FROM BROKER.RHH_CARGO,\n" +
                        "       BROKER.RHH_CARGO_DEP_REG_SUC,\n" +
                        "       BROKER.RHH_DEPARTAMENTO,\n" +
                        "       BROKER.RHH_REGIONAL,\n" +
                        "       BROKER.RHH_SUCURSAL\n" +
                        " WHERE (RHH_CARGO_DEP_REG_SUC.ID_CARGO = RHH_CARGO.ID)\n" +
                        "       AND (RHH_CARGO_DEP_REG_SUC.ID_DEPTO = RHH_DEPARTAMENTO.ID(+))\n" +
                        "       AND (RHH_CARGO_DEP_REG_SUC.ID_REGIONAL = RHH_REGIONAL.ID(+))\n" +
                        "       AND (RHH_CARGO_DEP_REG_SUC.ID_SUCURSAL = RHH_SUCURSAL.ID(+))\n" +
                        "       AND (RHH_CARGO.ESTADO = 0)\n" +
                        "       AND (UPPER(RHH_CARGO.DESCRIPCION) LIKE UPPER('%"+text+"%')\n" +
                        "            OR UPPER(RHH_SUCURSAL.DESCRIPCION) LIKE UPPER('%"+text+"%')\n" +
                        "            OR UPPER(RHH_REGIONAL.DESCRIPCION) LIKE UPPER ('%"+text+"%')\n" +
                        "            OR UPPER(RHH_DEPARTAMENTO.DESCRIPCION) LIKE UPPER('%"+text+"%'))";
        ResultSet rs = con.EjecutarConsulta(consulta);
        return Cargar(rs);
    }
    

    public List<RHH_CARGO> TodosLosInactivos(double regional) throws SQLException {
        String consulta = "select * from BROKER.RHH_CARGO sp where sp.ID not in(select ID_CARGO from BROKER.RHH_CARGO_REGIONAL where ID_REGIONAL = " + regional + ") AND sp.ESTADO=0";
        ResultSet rs = con.EjecutarConsulta(consulta);
        return Cargar(rs);
    }

    public List<RHH_CARGO> Cargar(ResultSet rs) throws SQLException 
    {
        List<RHH_CARGO> lista = new ArrayList<RHH_CARGO>();
        while (rs.next()) 
        {
            RHH_CARGO objeto = new RHH_CARGO(con);
            objeto.setID(rs.getInt("ID"));
            objeto.setDESCRIPCION(rs.getString("DESCRIPCION"));
            objeto.setID_DEPENDENCIA(rs.getInt("ID_DEPENDENCIA"));
            objeto.setID_TIPO_DE_CARGO(rs.getInt("ID_TIPO_DE_CARGO"));
            objeto.setNIVEL(rs.getInt("NIVEL"));
            objeto.setPERFIL(rs.getString("PERFIL"));
            objeto.setESTADO(rs.getInt("ESTADO"));
            objeto.setSTAFF(rs.getInt("STAFF"));
            
            lista.add(objeto);
        }
        return lista;
    }

    public int getID() {
        return ID;
    }

    public void setID(int ID) {
        this.ID = ID;
    }

    public int getID_DEPENDENCIA() {
        return ID_DEPENDENCIA;
    }

    public void setID_DEPENDENCIA(int ID_DEPENDENCIA) {
        this.ID_DEPENDENCIA = ID_DEPENDENCIA;
    }

    public int getID_TIPO_DE_CARGO() {
        return ID_TIPO_DE_CARGO;
    }

    public void setID_TIPO_DE_CARGO(int ID_TIPO_DE_CARGO) {
        this.ID_TIPO_DE_CARGO = ID_TIPO_DE_CARGO;
    }

    public int getNIVEL() {
        return NIVEL;
    }

    public void setNIVEL(int NIVEL) {
        this.NIVEL = NIVEL;
    }

    public String getDESCRIPCION() {
        return DESCRIPCION;
    }

    public void setDESCRIPCION(String DESCRIPCION) {
        this.DESCRIPCION = DESCRIPCION;
    }

    public String getPERFIL() {
        return PERFIL;
    }

    public void setPERFIL(String PERFIL) {
        this.PERFIL = PERFIL;
    }

    public Conexion getCon() {
        return con;
    }

    public void setCon(Conexion con) {
        this.con = con;
    }   

    public int getESTADO() {
        return ESTADO;
    }

    public void setESTADO(int ESTADO) {
        this.ESTADO = ESTADO;
    }

    public int getSTAFF() {
        return STAFF;
    }

    public void setSTAFF(int STAFF) {
        this.STAFF = STAFF;
    }
    
    
}
